#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
python 学习

__private_attrs：两个下划线开头，声明该属性为私有，不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

类的方法
在类的内部，使用 def 关键字可以为类定义一个方法，与一般函数定义不同，类方法必须包含参数 self,且为第一个参数

类的私有方法
__private_method：两个下划线开头，声明该方法为私有方法，不能在类的外部调用。在类的内部调用 self.__private_methods
"""

import logging
logging.basicConfig(level=logging.INFO)

__author__ = 'hubert'

# class后面紧接着是类名，即Student，类名通常是大写开头的单词，紧接着是(object)，表示该类是从哪个类继承下来的
class Student(object):

    def __init__(self, sex, age):
        self.sex = sex
        self.age = age

    # 无返回值，所以返回None，即控制
    def print_arg(self):
        print("无返回值")

    def print_return(self):
        self.print_arg()
        print("有返回值")
        return "python class"

    def __print_private(self):
        print("私有方法，不允许外部调用")


# 不是Student类的函数,x的n次方
def power(x, n):
    s = 1
    while n > 0:
        n = n -1
        s = s * x
    return s

# 递归
def fact(n):
    if n == 1:
        return 1
    return n * fact(n-1)


# 定义好了Student类，就可以根据Student类创建出Student的实例，创建实例是通过类名+()实现的：
if __name__ == '__main__':
    student = Student('男', 18)
    print(student.age, student.sex)

    student.print_arg()

    # print(student.print_return())

    print(fact(5))

    logging.info("日志打印")